<?php
namespace app\admin\controller;
/**
 * #文章管理#{用户管理控制器}
 */
class Article extends Common{
    /**
     * #文章列表#
     * @param  string $module_id [description]
     * @param  array $cate_id   [description]
     * @param  string $tag_id    [description]
     * @return [type]            [description]
     */
    function index($module_id='-1',$cate_id='',$tag_id='0'){
        if(is_string($cate_id)){
            $cate_id=explode(',', $cate_id);
        }
        
        foreach ($cate_id as $k => $v) {
            if($v>0){
                $cate_id[$k]=(int)$v;   
            }else{
                unset($cate_id[$k]);
            }

        }
        $params=[
            'module_id'=>$module_id,
            'cate_id'=>$cate_id,
            'tag_id'=>$tag_id,
        ];
        $artmodules=model('artmodule')->readAll();
        $this->assign('artmodules',$artmodules);

        $map=['status'=>1];
        if($module_id>0){
            $map=['module_id'=>$module_id];
        }
        $artcates=model('artcate')->readAll($map)->toArray();
        $artcates=node_merge($artcates);
        // var_dump($artcates);
        $this->assign('artcates',json_encode($artcates));

        $arttags=model('arttags')->readAll(['status'=>1],0,['order'=>'sort,id']);
        $this->assign('arttags',$arttags);

        $map=['status'=>1];
        if($module_id>0){
            $map=['module_id'=>$module_id];
        }
        if(!empty($cate_id)){
            $cate_ids=[end($cate_id)];
            $hasChildren=model('artcate')->readAll(['pid'=>$cate_ids[0]],0,['field'=>'id']);
            foreach ($hasChildren as $v) {
                $cate_ids[]=$v['id'];
            }
            $map=['cate_id'=>['cate_id','in',$cate_ids]];
        }
        if($tag_id>0){
            $map=['tag_id'=>$tag_id];
        }
        $this->assign('params',json_encode($params));

        $options=[
            'with'=>['author','module','cate','tag'],
            'order'=>'s_time desc',
            'field'=>'id,uid,title,cover,s_time,tag_id,cate_id,status,module_id'
        ];
        $list=model('article')->readAll($map,true,$options);
        $list->appends($params);
        // var_dump($list->render());die;
        $this->assign('list',$list);

        return view();
    }
    /**
     * 获取文章内容
     * @param  integer $id 文章ID
     * @return [type]      [description]
     */
    function getContent($id=0){
        if(request()->isAjax()||request()->isPost()){
            $content='';
            if($id>0){
                $c=model($this->table)->read(['id'=>$id],'content');
                if(isset($c['content'])){
                    $content=$c['content'];
                }
            }
            $this->success('','',$content);
        }
    }
    /**
     * #新增、编辑文章#
     * @param integer $id [description]
     */
    function add($id=0){
        $file=request()->file('file');
        if($file){
            $image=input('image/s','');
            $f=$this->loadHeadImg($file);
            if(!$f['success']){
                return json($f['msg'],1);
            }
            if($image){
                $this->deleteUploadFile($image);
            }
            if($id>0){
                $edit=model($this->table)->edit(['id'=>$id,'cover'=>$f['msg']]);
                if($edit){
                    return json('更改图片成功',0,$f['msg']);
                }
            }

            return json('',0,$f['msg']);
        }
        if(request()->isAjax()||request()->isPost()){
            $data=[
                'title'=>input('title/s',''),
                'module_id'=>input('module_id/d',0),
                'cate_id'=>input('cate_id/d',0),
                'tag_id'=>input('tag_id/d',0),
                'content'=>input('content/s',''),
                'cover'=>input('cover/s',''),
                'status'=>input('status/d',1),
            ];
            $validate=$this->validate($data,[
                'title|文章标题'=>'require',
                'content|文章内容'=>'require',
                'module_id|模块'=>'require',
                'cate_id|分类'=>'require',
                'tag_id|标签'=>'require',
            ]);
            if(true!==$validate){
                $this->error($validate);
            }
            if($id>0){
                $has=model('article')->where(['id'=>$id])->count();
                if(!$has){
                    $this->error('该条记录不存在或已删除');
                }
                
            }
            $hasModule=model('artmodule')->where(['id'=>$data['module_id']])->count();
            if(!$hasModule){
                $this->error('该模块可能已经删除');
            }
            $hasCate=model('artcate')->where(['id'=>$data['cate_id'],'module_id'=>$data['module_id']])->count();
            if(!$hasCate){
                $this->error('该分类可能已经删除');
            }
            $hasTag=model('arttags')->where(['id'=>$data['tag_id']])->count();
            if(!$hasTag){
                $this->error('该标签可能已经删除');
            }
            $o=false;
            if($id>0){
                $data['id']=$id;
                $o=model('article')->edit($data);
            }else{
                $data['s_time']=time();
                $data['uid']=$this->user['id'];
                $o=model('article')->add($data);
            }
            $this->success(lang('Successful operation'));
        }
    }
    /**
     * #文章删除#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function del($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $map=[];
            if(empty($ids)){
                $map=['id'=>$id];
            }else{
                $map=['id'=>['id','in',$ids]];
            }
            $covers=model('article')->readAll($map,0,['field'=>'cover']);
            $rs=model('article')->del($map);
            if($rs){
                foreach ($covers as $v) {
                    if(!empty($v['cover'])){
                        $this->deleteUploadFile($v['cover']);
                    }
                }
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    /**
     * #文章启用、禁用#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function close($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $rs=$this->_close('article',$id,$ids);
            if($rs['success']){
                $this->success($rs['msg']);
                die;
            }
            $this->error($rs['msg']);
        }
    }
    //文章模块
    function module(){
        $list=model('artmodule')->readAll([],true);
        $this->assign('list',$list);
        return view();
    }
    // 模块新增、编辑
    function moduleAdd($id=0){
        if(request()->isAjax()||request()->isPost()){
            $data=[
                'title'=>input('title/s',''),
                'name'=>input('name/s',''),
                'remark'=>input('remark/s',''),
                'status'=>input('status/d',1),
            ];
            $validate=$this->validate($data,[
                'title|模块名称'=>'require',
                'name|Name'=>'require',
            ]);
            if(true!==$validate){
                $this->error($validate);
            }
            if($id>0){
                $has=model('artmodule')->where(['id'=>$id])->count();
                if(!$has){
                    $this->error('该条记录不存在或已删除');
                }
                
            }
            $hasName=model('artmodule')->where(['name'=>$data['name'],'id'=>['id','neq',$id]])->count();
            if($hasName>0){
                $this->error('请保证Name的唯一性');
            }
            $o=false;
            if($id>0){
                $data['id']=$id;
                $o=model('artmodule')->edit($data);
            }else{
                $o=model('artmodule')->add($data);
            }
            if($o){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    // 文章模块删除
    function moduleDel($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $map=[];
            if(empty($ids)){
                $has=model('artcate')->where(['module_id'=>$id])->count();
                if($has>0){
                    $this->error('该模块下存在文章分类，不允许删除');
                }
                $map=['id'=>$id];
            }else{
                $has=model('artcate')->where(['module_id'=>['module_id','in',$ids]])->count();
                if($has>0){
                    $this->error('该模块下存在文章分类，不允许删除');
                }
                $map=['id'=>['id','in',$ids]];
            }
            $rs=model('artmodule')->del($map);
            if($rs){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    // 文章模块启用、禁用
    function moduleClose($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $rs=$this->_close('artmodule',$id,$ids);
            if($rs['success']){
                $this->success($rs['msg']);
                die;
            }
            $this->error($rs['msg']);
        }
    }
    /**
     * #文章分类#
     * @param  integer $module_id [description]
     * @return [type]             [description]
     */
    function cate($module_id=0){
        $artmodules=model('artmodule')->readAll();
        $this->assign('artmodules',$artmodules);
        $map=[];
        if($module_id>0){
            $map=['module_id'=>$module_id];
        }
        $list=model('artcate')->readAll($map,0,['with'=>'module','order'=>'id desc'])->toArray();
        $list=node_merge($list);
        $this->assign('list',json_encode($list));
        $this->assign('module_id',$module_id);
        return view();
    }
    /**
     * #文章分类新增、编辑#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function cateAdd($id=0){
        if(request()->isAjax()||request()->isPost()){
            $data=[
                'pid'=>input('pid/d',0),
                'name'=>input('name/s',''),
                'remark'=>input('remark/s',''),
                'module_id'=>input('module_id/d',0),
                'status'=>input('status/d',1),
            ];
            $validate=$this->validate($data,[
                'name|分类名称'=>'require',
                'module_id|模块'=>'require',
            ]);
            if(true!==$validate){
                $this->error($validate);
            }
            if($id>0){
                $has=model('artcate')->where(['id'=>$id])->count();
                if(!$has){
                    $this->error('该条记录不存在或已删除');
                }
                
            }
            if($data['pid']>0){
                $has=model('artcate')->where(['id'=>$data['pid']])->count();
                if(!$has){
                    $data['pid']=0;
                }
                
            }
            $hasModule=model('artmodule')->where(['id'=>$data['module_id']])->count();
            if(!$hasModule){
                $this->error('模块不存在');
            }
            $o=false;
            if($id>0){
                $data['id']=$id;
                $o=model('artcate')->edit($data);
            }else{
                $o=model('artcate')->add($data);
            }
            if($o){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    /**
     * #文章分类删除#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function cateDel($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $map=[];
            if(empty($ids)){
                $has=model('article')->where(['cate_id'=>$id])->count();
                if($has>0){
                    $this->error('该分类下存在文章，不允许删除');
                }
                $map=['id'=>$id];
            }else{
                $has=model('article')->where(['cate_id'=>['cate_id','in',$ids]])->count();
                if($has>0){
                    $this->error('该分类下存在文章，不允许删除');
                }
                $map=['id'=>['id','in',$ids]];
            }
            $rs=model('artcate')->del($map);
            if($rs){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    /**
     * #文章分类启用、禁用#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function cateClose($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $rs=$this->_close('artcate',$id,$ids);
            if($rs['success']){
                $this->success($rs['msg']);
                die;
            }
            $this->error($rs['msg']);
        }
    }
    /**
     * #文章标签#
     * @return [type] [description]
     */
    function tags(){
        $list=model('arttags')->readAll([],true,['order'=>'sort,id']);
        $this->assign('list',$list);
        return view();
    }
    /**
     * #文章标签新增、编辑#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function tagsAdd($id=0){
        if(request()->isAjax()||request()->isPost()){
            $data=[
                'name'=>input('name/s',''),
                'remark'=>input('remark/s',''),
                'icon'=>input('icon/s',''),
                'status'=>input('status/d',1),
                'sort'=>input('sort/d',1),
            ];
            $validate=$this->validate($data,[
                'name|分类名称'=>'require',
            ]);
            if(true!==$validate){
                $this->error($validate);
            }
            if($id>0){
                $has=model('arttags')->where(['id'=>$id])->count();
                if(!$has){
                    $this->error('该条记录不存在或已删除');
                }
                
            }
            $o=false;
            if($id>0){
                $data['id']=$id;
                $o=model('arttags')->edit($data);
            }else{
                $data['sort']=time();
                $o=model('arttags')->add($data);
            }
            if($o){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    /**
     * #文章标签删除#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function tagsDel($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $map=[];
            if(empty($ids)){
                $has=model('article')->where(['tag_id'=>$id])->count();
                if($has>0){
                    $this->error('该标签下存在文章，不允许删除');
                }
                $map=['id'=>$id];
            }else{
                $has=model('article')->where(['tag_id'=>['tag_id','in',$ids]])->count();
                if($has>0){
                    $this->error('该标签下存在文章，不允许删除');
                }
                $map=['id'=>['id','in',$ids]];
            }
            $rs=model('arttags')->del($map);
            if($rs){
                $this->success(lang('Successful operation'));
                die;
            }
            $this->error(lang('Failed operation'));
        }
    }
    /**
     * #文章标签启用、禁用#
     * @param  integer $id [description]
     * @return [type]      [description]
     */
    function tagsClose($id=0){
        if(request()->isAjax()||request()->isPost()){
            $ids=input('ids/a',[]); // 多项
            $rs=$this->_close('arttags',$id,$ids);
            if($rs['success']){
                $this->success($rs['msg']);
                die;
            }
            $this->error($rs['msg']);
        }
    }

    function getCates($module_id=0){
        if(request()->isAjax()||request()->isPost()){
            $map=[];
            if($module_id>0){
                $map=['module_id'=>$module_id];
            }
            $artcates=model('artcate')->readAll($map);
            $this->success('','',$artcates);
        }
    }
    /**
     * 用于wangEditor富文本编辑器上传图片
     * @return [type] [description]
     */
    function uploadsPicWangEditor(){
        $file=request()->file('file');
        $data=[];
        if(!empty($file)){
            foreach ($file as $v) {
                $rs=$this->loadHeadImg($v);
                if($rs['success']){
                    $data[]=images($rs['msg']);
                }
            }
        }
        $res=[
            'errno'=>empty($data)?1:0,
            'data'=>$data,
        ];
        return json_encode($res);
    }
}